# @Time : 2020/7/21 9:52
# @Author : Fioman 
# @Phone : 13149920693

"""
对于色彩均衡的图像,使用一个阈值就可以实现图像的阈值化处理.但是对于那些色彩不是均衡的,此时如果只是使用一个阈值,
就无法得到清晰有效的阈值分割结果图像.
自适应阈值是通过计算每个像素点临近区域的加权平均值获取阈值,并使用该阈值对当前像素点进行处理.
与普通的阈值处理方式对比,自适应阈值处理能更好地处理明暗差异较大的图像.
opencv中使用函数
cv.adaptiveThreshold(src,maxVlaue,adaptiveMethod,thresholdType,blockSize,C)
maxValue代表最大值.adaptiveMethod代表自适应方法.
thresholdType代表阈值处理方式,该值必须是cv.THRES_BINARY或者cv.THRES_BINARY_INV中的一个.

blockSize代表块的大小,表示一个像素在计算其阈值时使用的邻域尺寸,通常为3,5,7
C是常量.
adaptiveMethod表示自适应方法.方法主要有两种:
cv.ADAPTIVE_THRESH_MEAN_C: 邻域所有像素点的权重值是一致的.
cv.ADAPTIVE_THRESH_GAUSSIAN_C: 与邻域各个像素点到中心点的距离有关,通过高斯方程得到各个点的权重值.
"""
import cv2 as cv
import numpy as np

img = cv.imread("test.bmp",cv.IMREAD_GRAYSCALE)
img = cv.resize(img,None,fx=0.3,fy=0.3,interpolation=cv.INTER_LINEAR)
T,thres = cv.threshold(img,127,255,cv.THRESH_BINARY)

thresMean = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,5,3)
thresGaus = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,5,3)

cv.imshow("original",img)
cv.imshow("thresMean",thresMean)
cv.imshow("thresGaus",thresGaus)
cv.waitKey(0)
cv.destroyAllWindows()















